perm filename VISBIG.SAI[VIS,HPM]1 blob sn#192296 filedate 1975-12-18 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	REAL PROCEDURE SEARCH(REFERENCE INTEGER PIC1MAP,PIC2MAP
C00005 ENDMK
C⊗;
REAL PROCEDURE SEARCH(REFERENCE INTEGER PIC1MAP,PIC2MAP;
		      INTEGER WINDOWSIZE;
		      REFERENCE REAL POSX,POSY);

COMMENT applies the binary search correlation method to find a window
        centered about POSX,POSY in PIC1 (defined to be 0 to 1 in X and Y),
	and of size WINDOWSIZE pixels square in the whole of PIC2. PIC1MAP
	and PIC2MAP are an array of starting addresses of successively
	reduced versions of the pictures. The best match in PIC2 is returned
	in POSX and POSY, the value of the match (0 to 1) is the value of SEARCH;

   BEGIN
   INTEGER IL,JL,IH,JH,WID,HIG,NORD,I,J,K,L,M,N;   REAL QUAL;

   WID←MEMORY[PIC1MAP+LNBY];
   HIG←MEMORY[PIC1MAP+PCLN];
   NORD←0;
   WHILE WINDOWSIZE≤(WID MIN HIG) ASH -(NORD+1) DO NORD←NORD+1;

   QUAL←1.0;
   IL←0; JL←0;
   IH←(HIG ASH -NORD)-1; JH←(WID ASH -NORD)-1;

   FOR M←NORD STEP -1 UNTIL 0 DO
      BEGIN
      INTEGER ILT,JLT,IHT,JHT,D,
              ILS,JLS,IHS,JHS;		REAL QUALT;
      D←0;
      DO
         BEGIN
         D←D+1;
         JLT←JL; ILT←IL; JHT←JH; IHT←IH;
         JLS←POSX*WID/2↑M-WINDOWSIZE/2↑D;
         ILS←POSY*HIG/2↑M-WINDOWSIZE/2↑D;
         JHS←POSX*WID/2↑M+WINDOWSIZE/2↑D;
         IHS←POSY*HIG/2↑M+WINDOWSIZE/2↑D;
         QUALT←NORCOR(MEMORY[MEMORY[LOCATION(PIC1MAP)+M]],ILS,JLS,IHS,JHS,
                     MEMORY[MEMORY[LOCATION(PIC2MAP)+M]],ILT,JLT,IHT,JHT);
         END
      UNTIL QUALT≥.7 ∨ WINDOWSIZE/2↑D<((6-M) MAX 2);
      IL←ILT*2; JL←JLT*2;
      IH←IHT*2+1+((HIG ASH -(M-1)) MOD 2);
      JH←JHT*2+1+((WID ASH -(M-1)) MOD 2);
      QUAL←QUAL MIN QUALT;
      IF QUAL<.4 THEN
         BEGIN
         IL←IL*2↑M; IH←IH*2↑M; JL←JL*2↑M; JH←JH*2↑M;
         M←0;
         END;
      END;
   POSX←(JL+JH)/(4*WID); POSY←(IL+IH)/(4*HIG);
   RETURN(QUAL);
   END;